001    /**
002     * Created by IntelliJ IDEA.
003     * User: Wei Wang
004     * Date: Nov 27, 2002
005     * Time: 9:11:28 PM
006     */
007    
008    package EVolve.visualization.XYViz.ValRefViz.HotSpotViz;
009    
010    import EVolve.data.*;
011    import EVolve.visualization.*;
012    import EVolve.visualization.Dimension;
013    import EVolve.util.painters.PredictionPainter;
014    import javax.swing.*;
015    import java.awt.*;
016    
017    public class PredictionViz extends HotSpotVisualization{
018        private PredictorFactory[] factory; // predictor factories
019        private PredictorFactory selectedFactory; // predictor factory in use
020        private Predictor[] predictor; // predictors
021        private JComboBox comboPredictor; // combobox for selecting predictor factory
022    
023        public PredictionViz(PredictorFactory[] factory) {
024            super();
025            this.factory = factory;
026            painters[0] = new PredictionPainter();
027            painters[1] = painters[0];
028        }
029    
030        public Dimension[] createDimension() {
031            Dimension [] returnDimension = new Dimension[3];
032    
033            xAxis = new ValueDimension();
034            yAxis = new ReferenceDimension();
035            zAxis = new ReferenceDimension();
036            returnDimension[0] = xAxis;
037            returnDimension[1] = yAxis;
038            returnDimension[2] = zAxis;
039    
040            return returnDimension;
041        }
042    
043        protected JPanel createConfigurationPanel() {
044            configurationPanel = new JPanel(new GridLayout(2, 1, 5, 5));
045    
046            selectedFactory = factory[0];
047    
048            JPanel panelTop = new JPanel(new FlowLayout());
049            configurationPanel.add(panelTop);
050    
051            panelTop.add(new JLabel("Predictor: "));
052    
053            comboPredictor = new JComboBox();
054            for (int i = 0; i < factory.length; i++) {
055                comboPredictor.addItem(factory[i].getName());
056            }
057            panelTop.add(comboPredictor);
058    
059            JPanel returnValue = super.createConfigurationPanel();
060    
061            comboPainter.removeItemAt(0);
062            return returnValue;
063        }
064    
065        public void preVisualize() {
066            predictor = new Predictor[yAxis.getMaxEntityNumber()];
067            for (int i = 0; i < predictor.length; i++) {
068                predictor[i] = selectedFactory.createPredictor();
069            }
070            super.preVisualize();
071        }
072    
073        public void receiveElement(Element element) {
074            if (element.isOptional()) return;
075    
076            long x = xAxis.getField(element);
077            long y = yAxis.getField(element);
078            long z = zAxis.getField(element);
079    
080            phaseDetector.collectData(x/interval,y);
081    
082            paint(x,y,zAxis.getEntityFromInt((int)z).getId());
083        }
084    
085        public void visualize() {
086            yAxis.addComparator(new ValueComparator("Miss", false, ((PredictionPainter)painter).getMiss(),yAxis.getEntityName2IntMap()));
087            sort();
088        }
089    
090        protected void updateConfiguration() {
091            if (autoPredictorname ==  null)
092                selectedFactory = factory[comboPredictor.getSelectedIndex()];
093            else {
094                for (int i=0; i < factory.length; i++) {
095                    if (factory[i].getName().equals(autoPredictorname)) {
096                        selectedFactory = factory[i];
097                        break;
098                    }
099                }
100            }
101    
102            super.updateConfiguration();
103        }
104    
105        public PredictorFactory getPredictor() {
106            return selectedFactory;
107        }
108    
109        protected void installPainter() {
110            ((PredictionPainter)painters[0]).setPredictor(predictor,zAxis.getDataFilter().getTargetType());
111            super.installPainter();
112        }
113    
114        public Object clone() {
115            PredictionViz o = (PredictionViz) super.clone();
116            o.factory = new PredictorFactory[factory.length];
117            for (int i=0; i<factory.length; i++) {
118                o.factory[i] = (PredictorFactory)factory[i].clone();
119            }
120            o.selectedFactory = (PredictorFactory)selectedFactory.clone();
121            if (predictor != null) {
122                o.predictor = new Predictor[predictor.length];
123                for (int i=0; i<predictor.length; i++)
124                    o.predictor[i] = (Predictor)predictor[i].clone();
125            }
126            return o;
127        }
128    }